
這邊介紹幾個方式,可以讓 accessibility tree 忽略指定的元素,
像是以下情況:
標記這個屬性可以讓可達性 API 忽略這個元素,而不會影響到畫面。
這個標籤不應該用在能夠聚焦的元素上,
此外,這個屬性會影響到元素的所有子節點,
所以子節點需要聚焦的話,也不應該用這個屬性。
注意,標記他不會影響到畫面,所以元素可能依舊會被渲染。
請警慎的使用這個標籤,因為他不會影響到畫面,
除非拿掉該元素對整個頁面要表達的內容完全不影響,我們才會考慮使用它。
此外,aria-hidden="true" 跟 role="presentation" 還有 role="none" 看似很相近,
但用途不同。
aria-hidden="true" 會把元素跟所有子節點全部從 accessibility tree 上除去。role="presentation" 跟 role="none" 會移除該元素的語意,以下範例使用,font-awesome v6 跟 bootstrap v5
<button>
  <i class="fa-brands fa-twitter"></i>
  <span class="label"> Tweet </span>
</button>
變成
button "[]Tweet" focusable: true
    StaticText "[]"
    StaticText "Tweet"
標記成
<button>
  <i class="fa-brands fa-twitter" aria-hidden></i>
  <span class="label"> Tweet </span>
</button>
會變成
button "Tweet" focusable: true
    StaticText "Tweet"
標記 HTML 的 hidden 屬性會告訴瀏覽器這個元素不渲染。
注意,不要因為不會渲染就把敏感資訊丟上去,注意資安。
被標記 hidden 的元素必須被隱藏無論任何呈現方式,包含螢幕報讀。
被隱藏的元素依然會發揮它的作用,
像是 script 元素依然會執行腳本,form 元素依然會 submit。
但不應該被依然看得到的元素關聯,像是,a 的 href 連到這個元素,
畢竟內容已經被標注隱藏,沒理由連到這個元素。
通常是用 元素是否渲染到畫面上 來決定那個元素是否需要被忽略,
常見的方式像是,display:none 或 visibility:hidden。
它會作用整個元素包含子節點。
role=presentation 跟 role=none 是同義詞。
目的都是要移除該元素在 ARIA 的語意,
原因是有些元素原本就會有他隱含的語意,像是 article 或是 input 之類。
例如寫:
<h2 role="presentation">Democracy Dies in Darkness</h2>
就跟寫
<div>Democracy Dies in Darkness</div>
一樣。
有些元素屬於複合元素像是 ul, ol 被標注 role=presentation,
會影響到底下有關連的子元素也一起被拿掉語意。
像是
<ul role="presentation">
  <li>
    <a href="#">Link 1</a>
  </li>
  <li>
    <a href="#">Link 2</a>
  </li>
  <li>
    <a href="#">Link 3</a>
  </li>
</ul>
會變成
StaticText "*"
link "Link 1" focusable: true
    StaticText "Link 1"
StaticText "*"
link "Link 2" focusable: true
    StaticText "Link 2"
StaticText "*"
link "Link 3" focusable: true
    StaticText "Link 3"
如果只想要視覺上隱藏元素的話,可以用以下方式:
.sr-only {
  border: 0;
  clip: rect(0 0 0 0);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  white-space: nowrap;
  width: 1px;
}
這個很常被使用在幾類情況像是:
form 輸入欄位一定要有 label,
但畫面視覺設計上可能不想顯示這個標籤,
我們可以用 sr-only 進行隱藏。
<form>
  <label class="sr-only" for="search">Search criteria</label>
  <input type="text" id="search" name="search" value="" />
  <input type="submit" value="Search" />
</form>